import {Interpolant} from '../Interpolant.js';
import {Quaternion} from '../Quaternion.js';

/**
 * Spherical linear unit quaternion interpolant.
 */

function QuaternionLinearInterpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {

  Interpolant.call(this, parameterPositions, sampleValues, sampleSize, resultBuffer);

}

QuaternionLinearInterpolant.prototype = Object.assign(Object.create(Interpolant.prototype), {

  constructor: QuaternionLinearInterpolant,

  interpolate_: function (i1, t0, t, t1) {

    const result = this.resultBuffer,
      values = this.sampleValues,
      stride = this.valueSize,

      alpha = (t - t0) / (t1 - t0);

    let offset = i1 * stride;

    for (let end = offset + stride; offset !== end; offset += 4) {

      Quaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha);

    }

    return result;

  }

});


export {QuaternionLinearInterpolant};
